package queue;

public class ArrayQueueDemo {
}

// 数组队列
class ArrayQueue{
    private int MaxSize;// 队列容量
    private int front;// 队列首部
    private int rear;// 队列尾部
    private int[] arr;// 该数组用于存放数据,模拟队列

    // 构造器
    public ArrayQueue(int maxSize){
        MaxSize = maxSize;
        front = -1;// 指向队列头部,指向队列头的前一个位置
        rear = -1;// 指向队列尾部,指向队列尾部最后一个元素
        arr = new int[maxSize];
    }

    // 判断是否为空
    public boolean isNull(){
        return rear == front;
    }

    // 判断是否已满
    public boolean isEmpty(){
        return rear == MaxSize-1;
    }

    // 入队列
    public void addQueue(int n){
        if(isEmpty()){
            throw new RuntimeException("队列已满,不能在增加数据");
        }
        arr[++rear] = n;
    }

    // 出队列
    public int getQueue(){
        if(isNull()){
            throw new RuntimeException("队列为空,不能取数据");
        }
        front++;// front后移
        return arr[front];
    }

    // 显示队列
    public void showQueue(){
        if(isNull()){
            throw new RuntimeException("队列为空");
        }
        for (int i = front+1; i <=rear ; i++) {
            System.out.printf("arr[%d] = %d ",i,arr[i]);
        }
    }

    // 显示队列的头数据(不是取数据)
    public void showHead(){
        if(isNull()){
            throw new RuntimeException("队列为空");
        }
        System.out.println("头数据为"+arr[front+1]);
    }
}